package com.ruanxie.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@ConfigurationProperties(prefix = "intelligent.camera-yolo")
@Data
public class CameraAndYoloProperties {

    private String anacondaEnvironmentName; // Conda环境名称
    private String detectPythonLocation; // detect.py的路径
    private String detectPersonWeights; // 人数检测权重文件路径
    private String detectClassWeights; // 课堂检测权重文件路径
    private String projectOutputPath; // 检测结果保存路径
    private String detectResultName; // 检测结果文件夹名称
    private String captureImageDir; // 抓拍图片保存路径
    private int capturePeriod; // 抓拍周期（单位：秒）

    private String projectSaveStaticBaseLocation;


    // 定义命令的模板
    public final static String YOLO_RUN_STRING_FORMAT =
            "cmd.exe /c conda activate %s && python %s --source %%s --weights %s --project %s --name %s --exist-ok ";
        //注意：`--source %%s`中的 `%%s` 会被 `String.format` 替换为 `%s`，这表示在最终命令中会有一个 `--source %s`，以便在实际调用时插入图片路径。
    public static String yoloRunPersonDetectCMD;
    public static String yoloRunClassDetectCMD;

    // @PostConstruct 会在类初始化后执行，只生成一次命令
    @PostConstruct
    public void initYoloCommands() {
        // 使用 detectPersonWeights 初始化人数检测命令
        yoloRunPersonDetectCMD = String.format(YOLO_RUN_STRING_FORMAT,
                anacondaEnvironmentName,
                detectPythonLocation,
                detectPersonWeights,
                projectOutputPath,
                detectResultName
        ) + "--classes 1 ";

        // 使用 detectClassWeights 初始化课堂检测命令
        yoloRunClassDetectCMD = String.format(YOLO_RUN_STRING_FORMAT,
                anacondaEnvironmentName,
                detectPythonLocation,
                detectClassWeights,
                projectOutputPath,
                detectResultName
        );
        System.out.println(yoloRunClassDetectCMD+"\n"+yoloRunPersonDetectCMD);
    }

    // 获取人数检测命令，插入动态的图片路径
    public static String getYoloRunPersonDetectCMD(String imagePath) {
        return String.format(yoloRunPersonDetectCMD, imagePath);
    }

    // 获取课堂检测命令，插入动态的图片路径
    public static String getYoloRunClassDetectCMD(String imagePath) {
        return String.format(yoloRunClassDetectCMD, imagePath);
    }


}
